2016-09-26 33 views
0

我想繪製帶孔的圖形。(已解決)poly2tri - 三角形的IsInterior屬性 - 正確配置

result I wanna

要做到這一點,我不得不削減身影三角形和一個吸引他們的。

triangulated picture

在這裏,我有八個外部三角形和兩個室內。我想,我會只取外景,並提請他們像

const int y = 100; 
const int x = 100; 
const int offset = 20; 

IList<PolygonPoint> bounds = new List<PolygonPoint> 
{ 
    new PolygonPoint(0,0), 
    new PolygonPoint(0, y), 
    new PolygonPoint(x, y), 
    new PolygonPoint(x, 0), 
}; 

IList<PolygonPoint> hole = new List<PolygonPoint> 
{ 
    new PolygonPoint(offset, offset), 
    new PolygonPoint(x - offset, offset), 
    new PolygonPoint(offset, y - offset), 
    new PolygonPoint(x - offset, y - offset), 
}; 

Polygon polygon = new Polygon(bounds); // here polygon contains four dots 
polygon.AddHole(new Polygon(hole)); // and here - eight 

P2T.Triangulate(polygon); // here I get ten triangles 

foreach (var triangle in polygon.Triangles.Where(tr => tr.IsInterior)) // <-- problem 
{ 
    // draw 
} 

但在多邊形每個三角形有IsInterior ==真。我做錯了什麼?

P.S.對於PointSet,這個屬性在相同情況下總是爲false。

+0

每個三角形都在矩形ABCD內部,所以它們都是內部的。你只需要三角形內部/外部的洞。 – jdweng

+0

@jdweng,如果是這樣的話,這是一個問題。我沒有洞:他們是私人的。 – homk

+0

進行以下更改:polygon.AddHole(new Polygon(hole)); To:多邊形孔=新多邊形(孔); polygon.AddHole(空穴); – jdweng

回答

2

該死的,這很容易,我想。

我點錯了順序。

它必須

IList<PolygonPoint> hole = new List<PolygonPoint> 
{ 
    new PolygonPoint(offset, offset), 
    new PolygonPoint(offset, y - offset), 
    new PolygonPoint(x - offset, y - offset), 
    new PolygonPoint(x - offset, offset), 
}; 

除了所有這部分工作得很好,並且結果是這樣的:

correct triangles

感謝所有在這裏!