abr*_*ell 6 java swing awt graphics2d
我创建了一个自定义形状,实际上它是四个Arc2D对象的集合.
当绘制这些弧线时,它们形成可以被认为是四点圆形星形,有点像三叶草.一个弧结束,另一个弧开始.他们在中心形成一个正方形.所以想象一下,拿一个正方形并在每一边画半圈.
我可以将这个形状绘制到Graphics2D对象,但是当我填充它时,它只会填充弧而不是中心正方形.填补这个内部广场是我的问题.
我已经实现了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);
}
Run Code Online (Sandbox Code Playgroud)
每当我创建一个形状时,我总是创建一个 Path2D.Double 对象。然后,我使用 moveTo 到达起始位置,并结合使用 lineTo() 和 curveTo() 来沿着路径移动。然后,当我完成后,我调用 closePath()。它始终填写正确。
我没有任何实现 getPathIterator 的经验,但我确实注意到您没有执行 closePath() 。我不知道这是否是必需的,但我确实觉得采取我的方法会起作用。
下面是填充圆角矩形的示例:
双倍宽度 = 300; 双倍高度 = 400; Path2D.Double 路径 = new Path2D.Double(); 路径.moveTo(0.0, 8.0); 路径.curveTo(0.0, 0.0, 8.0, 0.0, 8.0, 0.0); path.lineTo(宽度 - 8.0, 0.0); path.curveTo(宽度, 0.0, 宽度, 8.0, 宽度, 8.0); path.lineTo(宽度, 高度 - 8.0); path.curveTo(宽度、高度、宽度 - 8.0、高度、宽度 - 8.0、高度); path.lineTo(8.0, 高度); path.curveTo(0.0, .height, 0.0, 高度 - 8.0, 0, 高度 - 8.0); 路径.closePath(); g2.fill(路径);