簡體   English   中英

Java - 填充自定義形狀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM