gpt4 book ai didi

Java - 填充自定义形状

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:27 25 4
gpt4 key购买 nike

我创建了一个自定义形状,本质上它是四个 Arc2D 对象的集合。

绘制这些弧线时,它们形成了一个四点圆角星形,有点像三叶草。一个弧线结束的地方,另一个弧线开始。它们在中心形成一个正方形。想象一下,取一个正方形并在每一边画半个圆。

我可以将这个形状绘制到 Graphics2D 对象,但是当我填充它时,它只会填充圆弧而不是中心正方形。填充这个内部方 block 是我的问题。

我已经实现了下面的 getPathIterator() 方法。我也实现了 contains() 方法。但它仍然只会填充弧线。

我尝试添加一个Rectangle。填充形状时,矩形/正方形会被正确填充,但是它也会绘制矩形,这显然应该是预期的,但绝对不是期望的结果。

那么,有没有人对如何“填充”这样的形状有任何想法?

public PathIterator getPathIterator(AffineTransform at) {
GeneralPath gp = new GeneralPath

for (Arc2D arcs : this.arcs) {
gp.append(arc, false);
}

return gp.getPathIterator(at);
}

最佳答案

每当我创建一个形状时,我总是创建一个 Path2D.Double 对象。然后,我使用 moveTo 到达起始位置,并结合使用 lineTo() 和 curveTo() 在路径中移动。然后,当我完成后,我调用 closePath()。它始终正确填充。

我没有任何实现 getPathIterator 的经验,但我确实注意到您没有执行 closePath()。我不知道这是否是必需的,但我确实觉得采用我的方法会奏效。

下面是一个填充圆角矩形的例子:

double width = 300;double height = 400;Path2D.Double path = new Path2D.Double();path.moveTo(0.0, 8.0);path.curveTo(0.0, 0.0, 8.0, 0.0, 8.0, 0.0);path.lineTo(width - 8.0, 0.0);path.curveTo(width, 0.0, width, 8.0, width, 8.0);path.lineTo(width, height - 8.0);path.curveTo(width, height, width - 8.0, height, width - 8.0, height);path.lineTo(8.0, height);path.curveTo(0.0, .height, 0.0, height - 8.0, 0, height - 8.0);path.closePath();g2.fill(path);

关于Java - 填充自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com