[英]Java - Filling a Custom Shape
我創建了一個自定義形狀,實際上它是四個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);
}
每當我創建一個形狀時,我總是創建一個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);
我對圖形知之甚少。但是我在sun的網站上看到了這些例子。我只是發布鏈接以備不時之需。 http://java.sun.com/products/java-media/2D/samples/suite/index.html
更改GeneralPath
的纏繞規則
gp.setWindingRule(GeneralPath.WIND_NON_ZERO);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.